1 | 'use strict';
|
2 |
|
3 | var Path = require('path');
|
4 | var Should = require('should');
|
5 | var IFNode = require('../');
|
6 |
|
7 | describe('Application', function() {
|
8 | describe('app = new Application', function() {
|
9 | it('without parameters', function() {
|
10 | var app = IFNode();
|
11 | var app1 = IFNode();
|
12 |
|
13 | app.should.be.an.Object();
|
14 | app.should.be.equal(app1);
|
15 | });
|
16 |
|
17 | it('with parameters', function() {
|
18 | var application_path = Path.resolve(__dirname, '../examples/config');
|
19 | var application_alias = 'application';
|
20 | var env = 'local';
|
21 | var app = IFNode({
|
22 | project_folder: application_path,
|
23 | alias: application_alias,
|
24 | env: env
|
25 | });
|
26 |
|
27 | app.project_folder.should.be.equal(application_path);
|
28 | app.project_folder.should.be.equal(app.projectFolder);
|
29 |
|
30 | app.alias.should.be.equal(application_alias);
|
31 | });
|
32 |
|
33 | it('should be valid configuration', function() {
|
34 | var app = IFNode('application');
|
35 | var config = app.config;
|
36 | var site_config = config.site;
|
37 |
|
38 | config.should.be.an.Object();
|
39 |
|
40 | config.env.should.be.equal('local');
|
41 | config.environment.should.be.equal('local');
|
42 |
|
43 | site_config.local.origin.should.be.equal('https://localhost:3000');
|
44 | site_config.global.ssl.key.should.be.equal(Path.resolve(app.project_folder, 'path/to/key'));
|
45 | site_config.global.origin.should.be.equal('https://ifnode.com');
|
46 |
|
47 | config.application.express.should.be.an.Object();
|
48 | config.application.folders.should.be.an.Object();
|
49 |
|
50 | config.db.virtual.schema.should.be.equal('virtual');
|
51 | });
|
52 |
|
53 | it("should be non-editable configuration", function() {
|
54 | var app = IFNode('application');
|
55 | var config = app.config;
|
56 |
|
57 | (function() {
|
58 | config.site = {};
|
59 | }).should.throw();
|
60 |
|
61 | (function() {
|
62 | config.site.local = {};
|
63 | }).should.throw();
|
64 |
|
65 | (function() {
|
66 | config.site.local.origin = 'my custom origin';
|
67 | }).should.throw();
|
68 | });
|
69 |
|
70 | it('should few instances', function() {
|
71 | var app1 = IFNode({
|
72 | alias: 'app1'
|
73 | });
|
74 | var app2 = IFNode({
|
75 | alias: 'app2'
|
76 | });
|
77 |
|
78 | IFNode('app1').should.be.equal(app1);
|
79 | IFNode('app2').should.be.equal(app2);
|
80 | });
|
81 | });
|
82 |
|
83 | describe('app properties', function() {
|
84 | var app = IFNode({
|
85 | alias: 'app-properties-check'
|
86 | });
|
87 |
|
88 | app.load();
|
89 |
|
90 | app.config.should.be.an.Object();
|
91 | app.server.should.be.an.Object();
|
92 | app.listener.should.be.a.Function();
|
93 |
|
94 | app.components.should.be.an.Object();
|
95 | app.models.should.be.an.Object();
|
96 | app.controllers.should.be.an.Object();
|
97 |
|
98 | app.id.should.be.a.String();
|
99 | app.alias.should.be.a.String();
|
100 | app.project_folder.should.be.a.String();
|
101 | app.projectFolder.should.be.a.String();
|
102 | app.backend_folder.should.be.a.String();
|
103 | app.backendFolder.should.be.a.String();
|
104 | });
|
105 |
|
106 | describe('app.require(id: string)', function() {
|
107 | var app = require('../examples/extensions/app');
|
108 |
|
109 | app.require('protected/extensions/a').should.have.property('value', 'a');
|
110 | app.require('./protected/extensions/a/b').should.have.property('value', 'a/b');
|
111 | app.require('app').should.be.equal(app);
|
112 | app.require('./../extensions/app').should.be.equal(app);
|
113 | });
|
114 |
|
115 | describe('app.register(module: string|Extension|Array<string|Extension>)', function() {
|
116 | it('not should empty', function() {
|
117 | var app = IFNode();
|
118 |
|
119 | (function() {
|
120 | app.register();
|
121 | }).should.throw();
|
122 | });
|
123 |
|
124 | it('load by extension name', function(done) {
|
125 | var app = IFNode({
|
126 | project_folder: Path.resolve(__dirname, '../examples/plugins')
|
127 | });
|
128 |
|
129 | app.register('ifnode-plugins-internal');
|
130 | done();
|
131 | });
|
132 |
|
133 | it('load by external name', function(done) {
|
134 | var app = IFNode({
|
135 | project_folder: Path.resolve(__dirname, '../examples/plugins')
|
136 | });
|
137 | var ifnode_plugin_external = Path.resolve(__dirname, '../examples/plugins/node_modules/ifnode-plugins-external');
|
138 |
|
139 | app.register(ifnode_plugin_external);
|
140 | done();
|
141 | });
|
142 |
|
143 | it('load by module', function(done) {
|
144 | var app = IFNode({
|
145 | project_folder: Path.resolve(__dirname, '../examples/plugins')
|
146 | });
|
147 | var ifnode_plugin_external = require(Path.resolve(__dirname, '../examples/plugins/node_modules/ifnode-plugins-external'));
|
148 |
|
149 | app.register(ifnode_plugin_external);
|
150 | done();
|
151 | });
|
152 |
|
153 | it('load by array', function(done) {
|
154 | var app = IFNode({
|
155 | project_folder: Path.resolve(__dirname, '../examples/plugins')
|
156 | }),
|
157 | ifnode_plugin_external = require(Path.resolve(__dirname, '../examples/plugins/node_modules/ifnode-plugins-external'));
|
158 |
|
159 | app.register([
|
160 | 'ifnode-plugins-internal',
|
161 | ifnode_plugin_external
|
162 | ]);
|
163 | done();
|
164 | });
|
165 |
|
166 | it('load schema, controller, component and mixed plugins', function() {
|
167 | var app = IFNode({
|
168 | project_folder: Path.resolve(__dirname, '../examples/plugins')
|
169 | });
|
170 |
|
171 | var internal_schema = require(Path.resolve(__dirname, '../examples/plugins/protected/extensions/internal-schema'));
|
172 | var internal_component = require(Path.resolve(__dirname, '../examples/plugins/protected/extensions/internal-component'));
|
173 | var internal_controller = require(Path.resolve(__dirname, '../examples/plugins/protected/extensions/internal-controller'));
|
174 | var external_mixed_module_path = Path.resolve(__dirname, '../examples/plugins/node_modules/external-mixed');
|
175 |
|
176 | app.register([
|
177 | 'internal-schema',
|
178 | 'internal-component',
|
179 | 'internal-controller',
|
180 | external_mixed_module_path
|
181 | ]);
|
182 |
|
183 | var modules = app._modules;
|
184 |
|
185 | modules.should.containEql(internal_schema);
|
186 | modules.should.containEql(internal_component);
|
187 | modules.should.containEql(internal_controller);
|
188 | modules.should.containEql(require(external_mixed_module_path));
|
189 | });
|
190 | });
|
191 |
|
192 | describe('app.load()', function() {
|
193 | var app = IFNode({
|
194 | alias: 'app-load-test'
|
195 | });
|
196 |
|
197 | Should.equal(Object.keys(app.components).length, 0);
|
198 | Should.equal(Object.keys(app.models).length, 0);
|
199 | Should.equal(Object.keys(app.controllers).length, 0);
|
200 |
|
201 | app.load();
|
202 |
|
203 | app.components.should.be.an.Object();
|
204 | app.models.should.be.an.Object();
|
205 | app.controllers.should.be.an.Object();
|
206 | });
|
207 |
|
208 | describe('app.run(callback?: function)', function() {
|
209 | it('without callback', function(done) {
|
210 | var app = IFNode();
|
211 |
|
212 | app.run();
|
213 |
|
214 | |
215 |
|
216 |
|
217 | setTimeout(function() {
|
218 | app.down();
|
219 | done();
|
220 | }, 10);
|
221 | });
|
222 |
|
223 | it('with callback', function(done) {
|
224 | var app = IFNode();
|
225 |
|
226 | app.run(function(config) {
|
227 | this.should.be.equal(app);
|
228 | this.config.should.be.equal(config);
|
229 |
|
230 | app.down();
|
231 | done();
|
232 | });
|
233 | });
|
234 | });
|
235 |
|
236 | describe('app.down(callback?: function)', function() {
|
237 | it('without callback', function(done) {
|
238 | var app = IFNode();
|
239 |
|
240 | app.run(function() {
|
241 | app.down();
|
242 | done();
|
243 | });
|
244 | });
|
245 |
|
246 | it('with callback', function(done) {
|
247 | var app = IFNode();
|
248 |
|
249 | app.run(function() {
|
250 | app.down(function() {
|
251 | done();
|
252 | });
|
253 | });
|
254 | });
|
255 | });
|
256 | });
|